#ifndef __INTEGRATION_H
#define __INTEGRATION_H

namespace math 
{
// numeric integraton. 
template <typename value_type, unsigned dim >
	struct state  {};


struct integration_tag {};
struct euler_intergration : public integration_tag {};
struct runge_kutta_integration : public integration_tag {};


template <typename vector_, typename tag_type = euler_intergration>
	struct integration {};


template <typename vector_ >
	struct integration <vector_, euler_intergration>
{
	typedef vector_ vector_type ;
	typedef typename vector_type::value_type  value_type; 
	
	template <typename unary_function>
	vector_type operator () (const vector_type & xn, const value_type & h, unary_function fun)
	{
		return xn + fun(xn) * h;
	}
};


}

#endif
